package com.yunbao.hujin.mymvpdemo2.mvp;

import android.os.Handler;
import android.util.Log;

import com.yunbao.hujin.mymvpdemo2.request.WeatherBean;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

/**
 * P层-特点:需要持有M层和V层 on 2017/12/7.
 * 将P层和V层的关联抽出两个方法，一个绑定，一个解绑，在需要的时候进行绑定V层，
 * 不需要的时候进行解绑就可以了。
 * <p>
 * 不需要在构造中传递V层了，然后再写一个绑定和解绑的方法，
 * 最后修改Activity创建Presenter时进行绑定，在onDestroy中进行解绑。
 */

public class RequestPresenter2 {

    private RequestView2 mView;
    private RequestMode2 mMode;

    public RequestPresenter2() {
        this.mMode = new RequestMode2();
    }

    /**
     * 处理数据逻辑层
     */
    public void clickRequest(final String cityId) {
        if (mView != null) {
            //请求时显示加载
            mView.requestLoading();

            //模拟耗时，可以展示出loading
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mMode.request(cityId, new Callback<WeatherBean>() {
                        @Override
                        public void onResponse(Call<WeatherBean> call, Response<WeatherBean> response) {
                            if (mView != null)
                                mView.resultSuccess(response.body());    //view展示数据
                        }

                        @Override
                        public void onFailure(Call<WeatherBean> call, Throwable t) {
                            if (mView != null)
                                mView.resultFailure(Log.getStackTraceString(t));
                        }
                    });
                }
            }, 1000);
        }
    }

    /**
     * 绑定
     */
    public void attach(RequestView2 view2) {
        this.mView = view2;
    }

    /**
     * 解除绑定
     */
    public void detach() {
        mView = null;
    }


    /**
     * 取消网络请求
     */
    public void interruptHttp() {
        mMode.interruptHttp();
    }

}
